#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
依赖检查工具
检查和安装必要的外部依赖
"""

import sys
import subprocess
import os
from pathlib import Path


class DependencyChecker:
    """依赖检查器"""
    
    def __init__(self):
        self.python_dependencies = {
            "PyQt6": "PyQt6",
            "python-docx": "docx",
            "openpyxl": "openpyxl",
            "python-pptx": "pptx",
            "reportlab": "reportlab",
            "pandas": "pandas",
            "PyPDF2": "PyPDF2",
            "fpdf2": "fpdf",
            "weasyprint": "weasyprint",
            "markdown": "markdown",
            "ebooklib": "ebooklib",
            "striprtf": "striprtf",
            "chardet": "chardet",
            "requests": "requests"
        }
    
    def check_python_dependencies(self):
        """检查Python依赖"""
        print("检查Python依赖...")
        print("=" * 50)
        
        missing_deps = []
        
        for package_name, import_name in self.python_dependencies.items():
            try:
                __import__(import_name)
                print(f"✓ {package_name} - 已安装")
            except ImportError:
                print(f"✗ {package_name} - 未安装")
                missing_deps.append(package_name)
        
        if missing_deps:
            print(f"\n缺少以下Python包: {', '.join(missing_deps)}")
            print("请运行以下命令安装:")
            print(f"pip install {' '.join(missing_deps)}")
            print("\n或者运行:")
            print("pip install -r requirements.txt")
            return False
        else:
            print("\n所有Python依赖都已安装！")
            return True
    

    
    def install_python_dependencies(self):
        """安装Python依赖"""
        print("正在安装Python依赖...")
        try:
            # 检查requirements.txt是否存在
            req_file = Path(__file__).parent / "requirements.txt"
            if req_file.exists():
                result = subprocess.run(
                    [sys.executable, "-m", "pip", "install", "-r", str(req_file)],
                    capture_output=True,
                    text=True
                )
                if result.returncode == 0:
                    print("Python依赖安装成功！")
                    return True
                else:
                    print(f"安装失败: {result.stderr}")
                    return False
            else:
                print("未找到requirements.txt文件")
                return False
        except Exception as e:
            print(f"安装过程中出现错误: {str(e)}")
            return False
    
    def generate_install_guide(self):
        """生成安装指南"""
        guide = r"""
# 文件格式转换工具 - 依赖安装指南

## 概述

本工具已完全使用Python库实现文件格式转换，无需安装任何外部工具（如LibreOffice、Calibre等）。

## Python依赖安装

### 系统要求
- Python 3.8或更高版本
- pip包管理器

### 安装步骤

1. 在项目目录下运行:
   ```bash
   pip install -r requirements.txt
   ```

2. 或者手动安装各个包:
   ```bash
   pip install PyQt6 python-docx openpyxl python-pptx reportlab pandas PyPDF2 fpdf2 weasyprint markdown ebooklib striprtf chardet requests
   ```

## 支持的转换格式

### 文档转换
- **DOC/DOCX → PDF**: 使用python-docx + reportlab
- **DOC/DOCX → ODT**: 使用python-docx + zipfile
- **RTF → DOCX/TXT**: 使用striprtf + python-docx

### 表格转换
- **XLS/XLSX → PDF**: 使用pandas + reportlab
- **XLS/XLSX → ODS**: 使用pandas + zipfile

### 演示文稿转换
- **PPT/PPTX → PDF**: 使用python-pptx + reportlab
- **PPT/PPTX → ODP**: 使用python-pptx + zipfile

### 电子书转换
- **EPUB → PDF**: 使用ebooklib + reportlab
- **EPUB → MOBI**: 使用ebooklib（简化格式）

### 网页转换
- **HTML → PDF**: 使用weasyprint（主要）+ reportlab（备用）
- **Markdown → HTML/DOCX/PDF**: 使用markdown + 其他库

### 其他转换
- **PDF → TXT**: 使用PyPDF2

## 故障排除

### Python包安装失败
1. 升级pip: `pip install --upgrade pip`
2. 使用国内镜像: `pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/`
3. 权限问题: `pip install --user -r requirements.txt`
4. 虚拟环境: 建议使用虚拟环境隔离依赖

### weasyprint安装问题
weasyprint可能需要额外的系统依赖：
- **Windows**: 通常可以直接安装
- **macOS**: 可能需要安装cairo等依赖
- **Linux**: 需要安装libcairo2-dev, libpango1.0-dev等

如果weasyprint安装失败，HTML转PDF功能会自动降级到reportlab（功能有限）。

### 转换质量说明
- 纯Python实现的转换可能在格式保真度上不如专业工具
- 复杂格式（如包含大量图片、表格的文档）可能转换效果有限
- 电子书转换为简化实现，主要提取文本内容

## 优势

1. **无外部依赖**: 不需要安装LibreOffice、Calibre等大型软件
2. **跨平台**: 纯Python实现，支持Windows、macOS、Linux
3. **轻量级**: 只需要Python环境和相关库
4. **易部署**: 可以轻松打包和分发
5. **可定制**: 可以根据需要修改转换逻辑
"""
        
        guide_file = Path(__file__).parent / "INSTALL_GUIDE.md"
        with open(guide_file, 'w', encoding='utf-8') as f:
            f.write(guide)
        
        print(f"安装指南已生成: {guide_file}")
    
    def run_full_check(self):
        """运行完整检查"""
        print("文件格式转换工具 - 依赖检查")
        print("=" * 50)
        
        python_ok = self.check_python_dependencies()
        
        print("\n" + "=" * 50)
        if python_ok:
            print("✓ 所有Python依赖都已安装，可以正常使用！")
            print("\n注意：本工具已完全使用Python库实现，无需外部工具。")
        else:
            print("✗ 存在缺失的Python依赖，请根据上面的提示进行安装")
            
            choice = input("\n是否现在安装Python依赖？(y/n): ")
            if choice.lower() == 'y':
                if self.install_python_dependencies():
                    print("\n重新检查依赖...")
                    python_ok = self.check_python_dependencies()
            
            if not python_ok:
                print("\n生成详细安装指南...")
                self.generate_install_guide()
        
        return python_ok


def main():
    """主函数"""
    checker = DependencyChecker()
    checker.run_full_check()


if __name__ == "__main__":
    main()